Elemental MediaConvertを利用してmp4をHLS変換 + サムネイル出力
コンニチハ、千葉です。
Elemental MediaConvertを利用してmp4をHLSに変換してみました。コンテナとかコーデックについては、こちらを確認ください。前提知識として持っておくと、Elemental MediaConvertの設定を理解しやすいです。
やりたいこと
- S3バケットにあるmp4ファイルから、HLSとサムネイルを出力する
- 何度も変換を行いたいのでジョブパラメータをテンプレート化したい
です。MediaConvertを利用すると結構簡単に実装できました。
やってみた
MediaConvertを開くと、メニューが表示されます。今回はジョブテンプレートを利用します。
- ジョブ:一回きりのジョブ。解像度とかビットレートなどを毎回指定必要
- 出力プリセット:出力に関するテンプレート。コンテナやコーデック、解像度などを指定しテンプレート化します。
- ジョブテンプレート:入力ファイル、出力先、アウトプット形式(コンテナやコーデック)を含めたジョブのテンプレート。出力形式を複数指定できます。今回のようにHLS + サムネイルみたいなジョブも作成できます。
ジョブテンプレートの設定
一般設定
テンプレートの名前やカテゴリ、説明を入力しましょう
入力
入力の設定をします。つまり、S3上に配置されている入力ファイルに関する設定です。入力を追加します。
設定変更は特にしません。ビデオセレクタは動画の開始位置などを指定、オーディをセレクタは音声チャンネル(日本語とか英語複数ある場合)を指定しますが、今回は変更しないのでデフォルトとします。
出力グループ:HLS
出力グループを追加します。これは、入力で指定したファイルをどのように出力するかを指定します。今回は、HLS + サムネイル出力するので出力グループを2つ追加します。
出力グループの追加をクリックし、HLS形式を選択します。
Outputをクリックしコーデックや解像度、ビットレートなどを設定します。今回は、以下の項目を変更しました。
- Video
- ビデオコーデック:H.264
- 解像度:1280 x 720
- フレームレート:30
- ビットレート:5000000
- Audio
- オーディオコーデック:AAC
- オーディオプロファイル:LC
名前修飾子の設定をします。これは必須入力なので、入力しないとエラーでテンプレートを作成できません。必ず入力しましょう。例えば「_hls」と指定すると、入力のファイル名に「_hls」が追加されたファイル名で出力されるようになります。
出力グループ:サムネイル
サムネイル用に、出力グループをもうひとつ追加します。ファイルグループを選択します。
まずは、サムネイルだけ欲しいのでオーディオは不要です。削除しましょう。
出力はファイルjpgファイルがほしいので、コンテナ形式での出力は不要です。No Containerを選択します。
ビデオコーデックはJPEG、サムネイル用なので1枚キャプチャがあればいいので、1を指定します。
名前修飾子の設定をします。HLSと同じように設定しましょう。
あとは、「作成」をクリックしテンプレート作成は終了です。
IAMロール
ジョブ実行用のIAMロールを作成する必要がります。こちらを参考に作成しましょう。
ジョブを実行する
ジョブテンプレートを利用して、ジョブを実行しましょう。
テンプレートで指定した入力、出力グループが設定された状態で、ジョブを作成できます。
ここでは、入力ファイルと、出力先S3を指定するだけでジョブが実行できます。それぞれ指定しましょう。
あとは、ジョブを作成します。
ジョブが実行されます。問題なければ、ジョブがCOMPLETEになるはずです。
S3を確認すると、ちゃんとファイルが出力されていました。
最後に
MediaConvertを利用して、mp4をHLSに変換できました。VIDEOJSなどのプレイヤーを使って、S3から直接ストリーミング配信もできますし、CloudFrontを導入することでキャッシュすることもできます。 また、ジョブテンプレートを使っているので、入力ファイルと出力先を指定するだけで、動画変換ができるようになりました。今度は、S3にmp4をアップロードしたことをトリガーにHLSに変換するような仕組みを作ってみたいと思います。